
#ifndef MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__DATA_ASSOCIATION_HPP_
#define MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__DATA_ASSOCIATION_HPP_

#include <list>
#include <memory>
#include <unordered_map>
#include <vector>

#define EIGEN_MPL2_ONLY
// #include "../tracker/tracker.h"
// #include "solver/gnn_solver.hpp"

#include <Eigen/Core>
#include <Eigen/Geometry>

// #include <autoware_auto_perception_msgs/msg/detected_objects.hpp>
namespace perception
{
    namespace algorithm
    {
        class DataAssociation
        {
        private:
            // Eigen::MatrixXi can_assign_matrix_;
            // Eigen::MatrixXd max_dist_matrix_;
            // Eigen::MatrixXd max_area_matrix_;
            // Eigen::MatrixXd min_area_matrix_;
            // Eigen::MatrixXd max_rad_matrix_;
            // Eigen::MatrixXd min_iou_matrix_;
            // const double score_threshold_;
            // std::unique_ptr<gnn_solver::GnnSolverInterface> gnn_solver_ptr_;

        public:
            // EIGEN_MAKE_ALIGNED_OPERATOR_NEW
            // DataAssociation(
            //     std::vector<int> can_assign_vector, std::vector<double> max_dist_vector,
            //     std::vector<double> max_area_vector, std::vector<double> min_area_vector,
            //     std::vector<double> max_rad_vector, std::vector<double> min_iou_vector);
            // void assign(
            //     const Eigen::MatrixXd &src, std::unordered_map<int, int> &direct_assignment,
            //     std::unordered_map<int, int> &reverse_assignment);
            // Eigen::MatrixXd calcScoreMatrix(
            //     const autoware_auto_perception_msgs::msg::DetectedObjects &measurements,
            // const std::list<std::shared_ptr<Tracker>> &trackers);
            virtual ~DataAssociation() {}
        };
    }
}
#endif // MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__DATA_ASSOCIATION_HPP_
